using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Gko.Utils.Interfaces
{
	public interface IBackground
	{
		void Run(Action action);
		void Run<T>(Action<T> action, T arg);
		void Run(Action action, Action callback);
		void Run<T>(Action<T> action, Action callback, T arg);
		void Run<T>(Action<T> action, Action<T> callback, T arg);
		void Run<T>(Func<T> func, Action<T> callback);
		void Run<T, TResult>(Func<T, TResult> func, Action<TResult> callback, T arg);
		void Run<T, TResult>(Func<T, TResult> func, Action<T, TResult> callback, T arg);
		event EventHandler<UnhandledExceptionEventArgs> UnhandledException;
		IBackgroundTransferObservable Transfer<T>(IEnumerable<T> source, IList<T> target);
	}
}
